home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / pctj8411.arc / SAVEBAS.ASM < prev    next >
Assembly Source File  |  1986-09-14  |  3KB  |  65 lines

  1. ;----------------------------------------------------------------------
  2. ;SAVEBAS.COM                 by Dan Rollins                 01/22/84
  3. ;
  4. ; This program will create a file from a BASIC program that was "lost"
  5. ; through an inadvertent use of the SYSTEM command.  After making that 
  6. ; mistake, execute this program and the lost program will be saved 
  7. ; to the default directory as %SAVED.BAS. It should then be saved and 
  8. ; reloaded before it is edited.
  9. ;
  10. ; Notes: This program works only for DOS 2.0 or later.
  11. ;        It must be executed IMMEDIATELY after exiting from BASIC--
  12. ;        before loading or running any program, especially BASIC!
  13. ;
  14. ;        This is a .COM program, so you must assemble, link, and 
  15. ;        EXE2BIN
  16. ;
  17.  
  18. com_seg  segment
  19.          assume cs:com_seg,ds:com_seg
  20.          org     100H
  21. begin:
  22.          jmp     code_start
  23. filename db '%SAVED.BAS',0             ;ASCIIZ string of filename
  24. err_msg  db 'File error encountered '
  25.          db 'while writing to %SAVED.BAS ',0DH,0AH,'$'
  26. ok_msg   db 'BASIC program file saved in %SAVED.BAS',0DH,0AH,'$'
  27.  
  28. code_start:
  29.          mov     dx,offset filename ;point to ASCIIZ string w/ filespec
  30.          mov     cx,0               ;file attribute = read/write
  31.          mov     ah,3cH
  32.          int     21H                ;DOS 2.0 CREATE file-handle service
  33.          jc      file_err           ;exit if error return
  34.          mov     bx,ax              ;save file handle in BX
  35.          mov     ax,0
  36.          mov     ds,ax
  37.          mov     ax,word ptr ds:[510H] ;fetch BASIC segment at 0000:0510
  38.          mov     ds,ax                 ;DS => BASIC program segment
  39.          mov     si,word ptr ds:[30H]  ;fetch start of the lost program
  40.          dec     si                    ;point to 1-byte before it and
  41.          mov     byte ptr [si],0FFH    ;place the token-file header byte
  42.          mov     cx,word ptr ds:[358H] ;fetch end of the lost program
  43.          sub     cx,si              ;CX = length of the lost program
  44.          mov     dx,si              ;DX is offset of first byte to write
  45.          mov     ah,40H             ;DOS 2.00 WRITE_HANDLE service
  46.          int     21H                ;write CX bytes starting at DS:DX
  47.                                     ; to file handle BX
  48.          jc      file_err           ;exit if error
  49.          mov     ah,3EH
  50.          int     21H                ;close the file handle in BX
  51.          mov     dx,offset ok_msg   ;indicate all OK
  52.          jmp     short exit
  53.  
  54. file_err:
  55.          mov     dx,offset err_msg
  56. exit:
  57.          push    cs
  58.          pop     ds                 ;make sure DS:DX points to message
  59.          mov     ah,9
  60.          int     21H                ;write the message at DS:DX
  61.          int     20H                ;exit to DOS
  62. com_seg  ends
  63.          end     begin
  64.  
  65.